FullConnection ================= 传入输入矩阵与权重矩阵,执行全连接计算(矩阵乘法),并可选择性地叠加偏置项与激活函数, 最终输出结果矩阵。 .. math:: dst_{i,j} = \sum_{k=0}^{K-1} A_{i,k} \cdot B_{k,j} + bias_{i,j} dst_{i,j} = activation(dst_{i,j}) 其中激活函数支持 ReLU 与 ReLU6。 输入: - **A** - 输入矩阵地址,形状为 ``M × K``。 - **B** - 权重矩阵地址,形状为 ``K × N``。 - **bias** - 偏置矩阵地址,形状为 ``M × N``,可为 ``NULL``。 - **M** - 输出矩阵行数。 - **N** - 输出矩阵列数。 - **K** - 中间维度大小。 - **activation_type** - 激活函数类型。 - **core_mask** - 核掩码(仅适用于共享存储版本)。 输出: - **C** - 输出矩阵地址,形状为 ``M × N``。 支持平台: ``FT78NE`` ``MT7004`` .. note:: - FT78NE 支持fp, int8 - MT7004 支持hp, fp - activation_type 支持 ``ACTIVATION_NONE``、``ACTIVATION_RELU``、``ACTIVATION_RELU6`` **共享存储版本:** .. c:function:: void i8_fullconnection_s(int8_t* A, int8_t* B, int8_t* C, int8_t* bias, int M, int N, int K, int activation_type, int core_mask) .. c:function:: void fp_fullconnection_s(float* A, float* B, float* C, float* bias, int M, int N, int K, int activation_type, int core_mask) .. c:function:: void hp_fullconnection_s(half* A, half* B, half* C, half* bias, int M, int N, int K, int activation_type, int core_mask) **C调用示例:** .. code-block:: c :linenos: :emphasize-lines: 13 //FT78NE示例 #include #include int main(int argc, char* argv[]) { float *A = (float *)0xA0000000; float *B = (float *)0xA0010000; float *C = (float *)0xC0000000; float *bias = NULL; int M = 4, N = 8, K = 16; int activation_type = ACTIVATION_RELU; int core_mask = 0xff; fp_fullconnection_s(A, B, C, bias, M, N, K, activation_type, core_mask); return 0; } **私有存储版本:** .. c:function:: void i8_fullconnection_p(int8_t* A, int8_t* B, int8_t* C, int8_t* bias, int M, int N, int K, int activation_type) .. c:function:: void fp_fullconnection_p(float* A, float* B, float* C, float* bias, int M, int N, int K, int activation_type) .. c:function:: void hp_fullconnection_p(half* A, half* B, half* C, half* bias, int M, int N, int K, int activation_type) **C调用示例:** .. code-block:: c :linenos: :emphasize-lines: 12 //FT78NE示例 #include #include int main(int argc, char* argv[]) { float *A = (float *)0x10810000; float *B = (float *)0x10820000; float *C = (float *)0x10830000; float *bias = NULL; int M = 4, N = 8, K = 16; int activation_type = ACTIVATION_RELU6; fp_fullconnection_p(A, B, C, bias, M, N, K, activation_type); return 0; }